/*
 * SharedMemory.cpp
 *
 *  Created on: 03/10/2013
 *      Author: ruben
 */

#include "SharedMemory.h"

SharedMemory::SharedMemory()
 {}

//////////////////////////////// constructor
SharedMemory::SharedMemory(key_t key)
 {
    buffer = NULL;
    shmid = 0;
    llave = key;
 }

/////////////////////////////// destructor
SharedMemory::~SharedMemory()
 { }



//////////////////////////////// genera nueva shared memory
bool SharedMemory::conectarShm()
{
    if ((shmid = shmget(llave, SHMSZ, IPC_CREAT | 0666)) < 0)
    {
        cout <<  "shmget" << endl;
        return false;
    }

    if ((buffer = (t_partida *)shmat(shmid, NULL, 0)) == NULL) {
        cout <<  "shmmat" << endl;
        return false;
    }

    return true;
}


/////////////////////////////////  lee los datos de la shared memory
t_partida SharedMemory::leerDatos(){
	t_partida s;
    memcpy(&s,buffer,sizeof(t_partida));

    return s;
}


/////////////////////////////////  escribe los datos en la shared memory
bool SharedMemory::escribirDatos(t_partida* datos){
    if(memcpy(buffer,datos,sizeof(t_partida)))
        return true;
    else
        return false;
}




////////////////////////////////// se desvincula y elimina la shared memory
void SharedMemory::cerrarShm(){
    if(shmdt(buffer) == -1)
    {
        perror("shmdt");
        exit(1);
    }

    shmctl(shmid, IPC_RMID, NULL);
}


/////////////////////////////////// seteo la llave
void SharedMemory::setKey(key_t key){
    llave = key;
}


//////////////////////////////// devuelve la llave de la SHM
key_t SharedMemory::getShmLlave(){
    return llave;
}
